package com.iotmonitor.iot.domain.dto;


import com.iotmonitor.common.core.enums.DataTypeEnum;
import com.iotmonitor.common.core.utils.DateUtils;
import com.iotmonitor.common.core.utils.StringUtils;
import com.iotmonitor.iot.api.domain.Fields;
import lombok.Data;

import java.lang.reflect.Field;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author ych 普通表
 * @create 2023-14/8/2023-上午 10:22
 */
@Data
public class QuotaInfo extends Quota {

    private Timestamp ts;

    private String deviceId;// 设备id

    private String quotaId;// 指标id

    private String quotaName;// 指标名称

    private String alarm;// 是否告警  0：不告警  1：告警

    private String level;// 告警级别

    private String alarmName;// 告警名称

    private String unit;// 单位

    private String referenceValue;// 参考值

    private Double numValue;// 数值指标

    private String stringValue;// 非数值指标

    /**
     * 获取本类所有属性
     * @return
     */
    public List<Fields> getFields(){
        // 获取Class对象的所有成员变量
        Field[] fields = this.getClass().getDeclaredFields();

        List<Fields> schemaFieldsStream = new ArrayList<>();
        Fields ts = new Fields("ts", DataTypeEnum.TIMESTAMP.getDataType());
        ts.setFieldValue(DateUtils.millisecondStampL());
        schemaFieldsStream.add(ts);
        // 遍历成员变量并输出属性
        for (Field field : fields) {
            String fieldName = field.getName().toLowerCase();
            schemaFieldsStream.add(new Fields(fieldName,field.getType().toString()));
        }
        return schemaFieldsStream;
    }

    /**
     * 获取父类所有属性
     * @return
     */
    public List<Fields> getSuperFields() {
        // 获取Class对象的所有成员变量
        Class<?> superClass = this.getClass().getSuperclass();

        List<Fields> tagsFieldsStream = new ArrayList<>();
        if (superClass != null) {
            Field[] fields = superClass.getDeclaredFields();
            // 遍历成员变量并输出属性
            for (Field field : fields) {
                String fieldName = field.getName().toLowerCase();
                tagsFieldsStream.add(new Fields(fieldName,field.getType().toString()));
            }
        }
        return tagsFieldsStream;
    }

    /**
     * 获取本类名称
     * @return
     */
    public String getClassName(){
        String[] split = StringUtils.split(this.getClass().getName(), '.');
        return split[split.length - 1].toLowerCase();
    }

    /**
     * 获取父类名称
     * @return
     */
    public String getSuperName(){
        String[] split = StringUtils.split(this.getClass().getSuperclass().getName(), '.');
        return split[split.length - 1].toLowerCase();
    }
}
